struct FroggerCar
{
    int x;
    int y;
};

struct FroggerState
{
    int playerX;
    int playerY;
    int score;
    int maxHeightReached;
    int numFramesSurvived;
    bool midtermRewardReceived;
    vector<FroggerCar> leftCars;
    vector<FroggerCar> rightCars;
};

class GameFrogger : public Game
{
public:
    void Init();
    string Name() { return "frogger"; }
    void NewGame();
    void Step(ControllerState& controller);
    ControllerState SimpleAI();

private:
    void MakeFrameSprites();
    void Reset();
    void RequestSpawnLeftCar();
    void RequestSpawnRightCar();
    bool IsCarAt(int x, int y);

    FroggerState _state;

    // Sprite IDs
    int _spriteFrogger;
    int _spriteCarLeft;
    int _spriteCarRight;
};